查看原文
其他

实际上采集全网视频也没那么难

李运辰 Python研究者 2022-07-01

大家好,我是辰哥。


今天来教大家如何下载全网视频,这里的全网就是你理解的全网。全网的视频搜索接口已经有第三方制作好了,这里就直接使用,获取到视频播放页面之后,程序自动下载视频。下面会以实战为主,手把手教你如何实现


涉及核心知识点:

  1. m3u8格式视频解析

  2. 网络视频请求

  3. 视频的合并


以下是精彩内容,不容错过(哈哈哈)


01视频搜索


这里的全网搜索来源于第三方(第三方已经写好了搜索接口),咱们直接在第三方的基础上去完成。实现视频全网搜索。下面电影:唐人街探案3为例。(其他电影、电视剧、动漫也是可以的,悄悄告诉你,也支持vip类型视频)


http://www.52xmn.com/so.php?so唐人街探案3&from=360



咱们这里是模糊搜索(关键字:唐人街探案3),可以搜索回来相关的视频,咱们选择第一个:唐人街探案3。下面开始讲解如何下载。


02提取视频地址



点击第一条搜索结果后,进入到播放页面:

http://www.52xmn.com/m/fqLqaRH4S0r1TR.html



查看网页源代码,(这里网站设置了无法按F12或者鼠标右键,可以先在网页按了F12在访问上面这个链接)。


查看网页源代码,没有找到视频的源地址,说明极有可能是ts(m3u8)的格式(目前很多视频都是采用这种格式)。


接着开始查看network数据包,最后找到下面数据包(index.m3u8)。



获取到这个链接,在浏览器访问之后,下载得到index.m3u8文件

https://vod.bunediy.com/20210430/36JdJMQn/index.m3u8



这个文件里面有很多链接(实际上是整个视频分割很多段小视频,每一个小视频对应一个链接,每一个小视频大概在几秒左右)。


通常index.m3u8的文件里面链接是ts的后缀,现在可以看到是image格式。如果直接下载为image格式的话,无法打开。这里改为mp4的格式化后,下载后正常打开(并且还是高清的)




这里随机选择了一个下载,成功播放出来,下面把index.m3u8里面的所有分段视频下载,然后合并成一个完整的视频。





03下载分段视频


上面的讲解都是手动下载index.m3u8,然后把image改为mp4格式,再去下载,现在使用程序去下载。自动化完成这些操作。


1.请求index.m3u8



请求结果如下:



2.下载视频


思路:提取里面每一个链接,,然后下载保存成mp4的格式,最后将这些mp4视频进行拼接合并。



提取结果如下:



提取到视频链接后,下面开始下载



name是保存视频名称,v_url是上面的视频链接



这么定义了count,从1开始,目的是将这些分段视频保存为:1.mp4、2.mp4、.....,这样可以方便后面进行按顺序合并。


最终保存到文件夹mp4中




全部下载好之后,一共是1618个分段视频



由于是高清版本视频,1618个分段视频大小一共是1.17G




04合并视频




合并视频的话,之前使用过cmd的方式,不过从读者的反馈来看,对于非window的读者来说,很多不便。那么本文将采取另外一直方式(纯python


相信大家也看过了几天写的一篇文章(实战|惊呆了,Python竟然能剪辑视频!),里面就有介绍视频合并的方法,本文就采用该方法去合并这些分段视频。


PS: VideoFileClip不能一下子合并太多的视频,这里是1618个,一次性合并的话会报错,所以这里分开合并成大片段,然后在合并成完整视频


这里以50个为界限进行合并,1618/50=33(取整),最后再将33个大片段合并成完整视频。



合并效果:



这里成功将前面50个小片段合成完毕,接着将剩下的全部合并



这样我们就可以将1618个小片段合并成完整的视频。


05小结


本文涉及核心知识点:

  1. m3u8格式视频解析

  2. 网络视频请求

  3. 视频的合并


最后说一声:原创不易,求给个赞、在看、评论


为了大家方便学习,辰哥已经把本文的完整源码上传,需要的小伙伴可以去辰哥朋友圈免费领取。


推荐阅读

实战|惊呆了,Python竟然能剪辑视频!

实战|教你用Python玩转Redis

实战|教你用Python玩转Mysql


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存